#pragma once
#include <opencv2/opencv.hpp>
#include <eigen3/Eigen/Core>
#include <ORBextractor.h>
// 帧类---采用双目建图、单目或者双目定位的形式
// 只接受灰色图像
class Frame
{
private:
    std::shared_ptr<EASY::ORBextractor> mspORBextractor;
public:
    cv::Mat mPic;// frame对应的picture

    static long siFrameAllId;

    long mlId;// frame本身的id
    double mStamp; // frame的时间戳
    std::vector<long long> mvids;// 自己全部特征点的id

    std::vector<cv::KeyPoint> mvKeys;// 关键点
    std::vector<Eigen::Vector3d> mv3dKeys;// 关键点在相机坐标系的3d值
    cv::Mat mDescriptors;// 描述子
    
    void setPic(cv::Mat _pic){
        _pic.copyTo(mPic);
    }

    void calculateOrb(void);
    
    Frame();
    Frame(cv::Mat _pic);
    Frame(cv::Mat & inPic, std::shared_ptr<EASY::ORBextractor> inORBextractor);
    Frame(cv::Mat & inPic, double stamp,std::shared_ptr<EASY::ORBextractor> inORBextractor);
    ~Frame();
};

